#pragma once

#include "../engine.h"
#include "../../group/cluster/cluster.h"
#include "../../element_sorter.h"


namespace burn {

class GStaticEngine : public GEngine {
protected:
  CStatus setup(const GSortedGElementPtrSet &elements) override;

  CStatus run() override;

  CStatus afterRunCheck() override;

  /**
   * 对数据进行标记和整理
   * @param elements
   * @return
   */
  CStatus mark(const GSortedGElementPtrSet &elements);

  /**
   * 将所有注册到 pipeline 中的信息，解析到 para_cluster_arrs_ 中
   * @param elements
   * @return
   */
  CStatus analyse(const GSortedGElementPtrSet &elements);

private:
  ParaWorkedClusterArrs para_cluster_arrs_; // 可以并行的cluster数组
  CUint run_element_size_ = 0; // 当前已经执行的element的数量
};

} // namespace burn